package lib

import (
	"goloader"
	"os"
)

// Ptros 设置os库指针
func Ptros(symPtr map[string]uintptr) {
	// 注册函数
	goloader.RegFunc(symPtr, "os.Chdir", os.Chdir)
	goloader.RegFunc(symPtr, "os.Chmod", os.Chmod)
	goloader.RegFunc(symPtr, "os.Chown", os.Chown)
	goloader.RegFunc(symPtr, "os.Chtimes", os.Chtimes)
	goloader.RegFunc(symPtr, "os.Clearenv", os.Clearenv)
	goloader.RegFunc(symPtr, "os.Environ", os.Environ)
	goloader.RegFunc(symPtr, "os.Executable", os.Executable)
	goloader.RegFunc(symPtr, "os.Exit", os.Exit)
	goloader.RegFunc(symPtr, "os.Expand", os.Expand)
	goloader.RegFunc(symPtr, "os.ExpandEnv", os.ExpandEnv)
	goloader.RegFunc(symPtr, "os.Getegid", os.Getegid)
	goloader.RegFunc(symPtr, "os.Getenv", os.Getenv)
	goloader.RegFunc(symPtr, "os.Geteuid", os.Geteuid)
	goloader.RegFunc(symPtr, "os.Getgid", os.Getgid)
	goloader.RegFunc(symPtr, "os.Getgroups", os.Getgroups)
	goloader.RegFunc(symPtr, "os.Getpagesize", os.Getpagesize)
	goloader.RegFunc(symPtr, "os.Getpid", os.Getpid)
	goloader.RegFunc(symPtr, "os.Getppid", os.Getppid)
	goloader.RegFunc(symPtr, "os.Getuid", os.Getuid)
	goloader.RegFunc(symPtr, "os.Getwd", os.Getwd)
	goloader.RegFunc(symPtr, "os.Hostname", os.Hostname)
	goloader.RegFunc(symPtr, "os.IsExist", os.IsExist)
	goloader.RegFunc(symPtr, "os.IsNotExist", os.IsNotExist)
	goloader.RegFunc(symPtr, "os.IsPathSeparator", os.IsPathSeparator)
	goloader.RegFunc(symPtr, "os.IsPermission", os.IsPermission)
	goloader.RegFunc(symPtr, "os.IsTimeout", os.IsTimeout)
	goloader.RegFunc(symPtr, "os.Lchown", os.Lchown)
	goloader.RegFunc(symPtr, "os.Link", os.Link)
	goloader.RegFunc(symPtr, "os.LookupEnv", os.LookupEnv)
	goloader.RegFunc(symPtr, "os.Mkdir", os.Mkdir)
	goloader.RegFunc(symPtr, "os.MkdirAll", os.MkdirAll)
	goloader.RegFunc(symPtr, "os.NewSyscallError", os.NewSyscallError)
	goloader.RegFunc(symPtr, "os.Pipe", os.Pipe)
	goloader.RegFunc(symPtr, "os.Readlink", os.Readlink)
	goloader.RegFunc(symPtr, "os.Remove", os.Remove)
	goloader.RegFunc(symPtr, "os.RemoveAll", os.RemoveAll)
	goloader.RegFunc(symPtr, "os.Rename", os.Rename)
	goloader.RegFunc(symPtr, "os.SameFile", os.SameFile)
	goloader.RegFunc(symPtr, "os.Setenv", os.Setenv)
	goloader.RegFunc(symPtr, "os.Symlink", os.Symlink)
	goloader.RegFunc(symPtr, "os.TempDir", os.TempDir)
	goloader.RegFunc(symPtr, "os.Truncate", os.Truncate)
	goloader.RegFunc(symPtr, "os.Unsetenv", os.Unsetenv)
	goloader.RegFunc(symPtr, "os.UserCacheDir", os.UserCacheDir)
	goloader.RegFunc(symPtr, "os.UserConfigDir", os.UserConfigDir)
	goloader.RegFunc(symPtr, "os.UserHomeDir", os.UserHomeDir)
	goloader.RegFunc(symPtr, "os.Create", os.Create)
	goloader.RegFunc(symPtr, "os.NewFile", os.NewFile)
	goloader.RegFunc(symPtr, "os.Open", os.Open)
	goloader.RegFunc(symPtr, "os.OpenFile", os.OpenFile)
	goloader.RegFunc(symPtr, "os.Lstat", os.Lstat)
	goloader.RegFunc(symPtr, "os.Stat", os.Stat)
	goloader.RegFunc(symPtr, "os.FindProcess", os.FindProcess)
	goloader.RegFunc(symPtr, "os.StartProcess", os.StartProcess)
	// 注册类型
	{
		p := new(os.File)
		goloader.RegTypes(symPtr, p,
			p.Chdir,
			p.Chmod,
			p.Chown,
			p.Close,
			p.Fd,
			p.Name,
			p.Read,
			p.ReadAt,
			p.Readdir,
			p.Readdirnames,
			p.Seek,
			p.SetDeadline,
			p.SetReadDeadline,
			p.SetWriteDeadline,
			p.Stat,
			p.Sync,
			p.SyscallConn,
			p.Truncate,
			p.Write,
			p.WriteAt,
			p.WriteString,
		)
	}
	{
		p := new(os.FileMode)
		goloader.RegTypes(symPtr, p,
			p.IsDir,
			p.IsRegular,
			p.Perm,
			p.String,
		)
	}
	{
		p := new(os.LinkError)
		goloader.RegTypes(symPtr, p,
			p.Unwrap,
			p.Error,
		)
	}
	{
		p := new(os.PathError)
		goloader.RegTypes(symPtr, p,
			p.Error,
			p.Timeout,
			p.Unwrap,
		)
	}
	goloader.RegTypes(symPtr, new(os.ProcAttr))
	{
		p := new(os.Process)
		goloader.RegTypes(symPtr, p,
			p.Kill,
			p.Release,
			p.Signal,
			p.Wait,
		)
	}
	{
		p := new(os.ProcessState)
		goloader.RegTypes(symPtr, p,
			p.ExitCode,
			p.Exited,
			p.Pid,
			p.String,
			p.Success,
			p.Sys,
			p.SysUsage,
			p.SystemTime,
			p.UserTime,
		)
	}
	{
		p := new(os.SyscallError)
		goloader.RegTypes(symPtr, p,
			p.Error,
			p.Timeout,
			p.Unwrap,
		)
	}
}
